﻿package com.amcharts.utils
{
    import flash.display.*;
    import flash.filters.*;
    import flash.geom.*;
    import flash.utils.*;
    import mx.collections.*;
    import mx.core.*;
    import mx.formatters.*;
    import mx.styles.*;

    public class Utils extends Object
    {
        static const VERSION:String = "1.8.3.1";

        public function Utils()
        {
            return;
        }// end function

        public static function adjustBrightness(param1:DisplayObject, param2:Number) : void
        {
            var _loc_3:* = param1.transform.colorTransform;
            _loc_3.redMultiplier = param2;
            _loc_3.greenMultiplier = param2;
            _loc_3.blueMultiplier = param2;
            param1.transform.colorTransform = _loc_3;
            return;
        }// end function

        public static function fitToBounds(param1:Number, param2:Number, param3:Number) : Number
        {
            if (param1 < param2)
            {
                param1 = param2;
            }
            if (param1 > param3)
            {
                param1 = param3;
            }
            return param1;
        }// end function

        public static function setRGB(param1:DisplayObject, param2:uint) : void
        {
            var _loc_3:* = new ColorTransform();
            _loc_3.color = param2;
            param1.transform.colorTransform = _loc_3;
            return;
        }// end function

        public static function removeTweens(param1:Array) : void
        {
            return;
        }// end function

        public static function chooseId(param1:Array, param2:Number, param3:String, param4:String) : Number
        {
            param2 = param2 + 1;
            var _loc_5:* = param3 + param2;
            var _loc_6:Number = 0;
            while (_loc_6 < param1.length)
            {
                
                if (param1[_loc_6][param4] == _loc_5)
                {
                    return chooseId(param1, param2, param3, param4);
                }
                _loc_6 = _loc_6 + 1;
            }
            return param2;
        }// end function

        public static function checkNaN(param1:Number, param2:Number) : Number
        {
            if (isNaN(param1))
            {
                param1 = param2;
            }
            return param1;
        }// end function

        public static function removeTimeouts(param1:Array) : void
        {
            var _loc_2:Number = NaN;
            var _loc_3:Number = NaN;
            if (param1)
            {
                _loc_2 = param1.length;
                while (_loc_3 < _loc_2)
                {
                    
                    clearTimeout(param1[_loc_3]);
                    _loc_3 = _loc_3 + 1;
                }
            }
            return;
        }// end function

        public static function stripNumbers(param1:String) : String
        {
            var _loc_2:* = param1.split("");
            param1 = "";
            var _loc_3:uint = 0;
            while (_loc_3 < _loc_2.length)
            {
                
                if (isNaN(Number(_loc_2[_loc_3])))
                {
                    param1 = param1 + _loc_2[_loc_3];
                }
                _loc_3 = _loc_3 + 1;
            }
            return param1;
        }// end function

        public static function copySprite(param1:Sprite, param2:Number = 0, param3:Number = 0) : Bitmap
        {
            var _loc_4:* = param1.width;
            var _loc_5:* = param1.height;
            if (param2 == 0)
            {
            }
            if (param3 != 0)
            {
                _loc_4 = param2 * 2;
                _loc_5 = param3 * 2;
            }
            if (_loc_4 > 2880)
            {
                _loc_4 = 2880;
            }
            if (_loc_5 > 2880)
            {
                _loc_5 = 2880;
            }
            var _loc_6:* = new BitmapData(_loc_4, _loc_5, true, 0);
            var _loc_7:* = new Matrix();
            _loc_7.tx = param2;
            _loc_7.ty = param3;
            var _loc_8:* = new Bitmap(_loc_6);
            _loc_6.draw(param1, _loc_7);
            return _loc_8;
        }// end function

        public static function clone(param1:Object)
        {
            var _loc_2:* = new ByteArray();
            _loc_2.writeObject(param1);
            _loc_2.position = 0;
            return _loc_2.readObject();
        }// end function

        public static function removeChildren(param1:Sprite) : void
        {
            var _loc_2:Number = NaN;
            if (param1)
            {
                _loc_2 = param1.numChildren - 1;
                while (_loc_2 >= 0)
                {
                    
                    delete Utils[param1.getChildAt(_loc_2)];
                    param1.removeChildAt(_loc_2);
                    _loc_2 = _loc_2 - 1;
                }
            }
            return;
        }// end function

        public static function capitalizeFirst(param1:String) : String
        {
            var _loc_2:* = param1.substr(0, 1);
            var _loc_3:* = param1.substr(1, param1.length);
            return _loc_2.toUpperCase() + _loc_3;
        }// end function

        public static function addPrefix(param1:Number, param2:Array, param3:Array, param4:NumberFormatter) : String
        {
            var _loc_7:Number = NaN;
            var _loc_8:Number = NaN;
            var _loc_9:Number = NaN;
            var _loc_5:* = param4.format(param1);
            var _loc_6:String = "";
            if (param1 == 0)
            {
                return "0";
            }
            if (param1 < 0)
            {
                _loc_6 = "-";
            }
            param1 = Math.abs(param1);
            if (param1 > 1)
            {
                _loc_7 = param2.length - 1;
                while (_loc_7 > -1)
                {
                    
                    if (param1 >= param2[_loc_7].number)
                    {
                        _loc_8 = param1 / param2[_loc_7].number;
                        _loc_9 = Number(param4.precision);
                        if (_loc_9 < 1)
                        {
                            _loc_9 = 1;
                        }
                        _loc_8 = Utils.roundTo(_loc_8, _loc_9);
                        _loc_5 = _loc_6 + "" + _loc_8 + "" + param2[_loc_7].prefix;
                        break;
                    }
                    _loc_7 = _loc_7 - 1;
                }
            }
            else
            {
                _loc_7 = 0;
                while (_loc_7 < param3.length)
                {
                    
                    if (param1 <= param3[_loc_7].number)
                    {
                        _loc_8 = param1 / param3[_loc_7].number;
                        _loc_9 = Math.abs(Math.round(Math.log(_loc_8) * Math.LOG10E));
                        _loc_8 = Utils.roundTo(_loc_8, _loc_9);
                        _loc_5 = _loc_6 + "" + _loc_8 + "" + param3[_loc_7].prefix;
                        break;
                    }
                    _loc_7 = _loc_7 + 1;
                }
            }
            return _loc_5;
        }// end function

        public static function formatString(param1:String, param2:Object, param3:NumberFormatter, param4:NumberFormatter, param5:Number = NaN, param6:Number = NaN, param7:Boolean = false, param8:Boolean = false, param9:Array = null, param10:Array = null) : String
        {
            var string:* = param1;
            var dataItem:* = param2;
            var numberFormatter:* = param3;
            var percentFormatter:* = param4;
            var positiveColor:* = param5;
            var negativeColor:* = param6;
            var usePositiveNegativeOnPercentsOnly:* = param7;
            var usePrefixes:* = param8;
            var bigPrefixes:* = param9;
            var smallPrefixes:* = param10;
            var regx:* = /(\[\[[^\]]+\]\])""(\[\[[^\]]+\]\])/ig;
            var newstr:* = string.replace(regx, function () : String
            {
                var _loc_3:* = undefined;
                var _loc_4:* = undefined;
                var _loc_5:* = undefined;
                var _loc_6:* = undefined;
                var _loc_7:* = undefined;
                var _loc_8:* = undefined;
                var _loc_9:* = undefined;
                var _loc_10:* = undefined;
                var _loc_11:* = undefined;
                var argument:String = arguments.shift().replace(/\[\[""\[\[/, "").replace(/\]\]""\]\]/, "");
                if (argument.indexOf(".") != -1)
                {
                    if (argument.split(".")[0] == "percents")
                    {
                        _loc_6 = true;
                        if (dataItem.hasOwnProperty("percents"))
                        {
                            argument = argument.split(".")[1];
                            _loc_7 = dataItem;
                            dataItem = dataItem.percents;
                            if (!dataItem.hasOwnProperty(argument))
                            {
                                argument = "percents." + argument;
                            }
                        }
                    }
                }
                if (dataItem.hasOwnProperty(argument))
                {
                    _loc_3 = dataItem[argument];
                    if (_loc_6)
                    {
                        dataItem = _loc_7;
                    }
                    if (argument != "percents")
                    {
                    }
                    if (_loc_6)
                    {
                        _loc_9 = Number(_loc_3);
                        _loc_3 = percentFormatter.format(_loc_3);
                        if (!isNaN(_loc_9))
                        {
                            if (_loc_9 >= 0)
                            {
                            }
                            if (!isNaN(positiveColor))
                            {
                                _loc_3 = "<font color=\'" + Utils.dec2hex(positiveColor) + "\'>" + _loc_3 + "";
                            }
                            if (_loc_9 < 0)
                            {
                            }
                            if (!isNaN(negativeColor))
                            {
                                _loc_3 = "<font color=\'" + Utils.dec2hex(negativeColor) + "\'>" + _loc_3 + "";
                            }
                        }
                    }
                    else
                    {
                        _loc_10 = false;
                        if (numberFormatter.precision == -1)
                        {
                            _loc_8 = true;
                            if (_loc_3 is Number)
                            {
                                _loc_4 = 0;
                                if (String(_loc_3).indexOf("e") != -1)
                                {
                                }
                                if (!usePrefixes)
                                {
                                    _loc_10 = true;
                                }
                                else
                                {
                                    _loc_5 = String(_loc_3).split(".");
                                    if (_loc_5.length == 2)
                                    {
                                        _loc_4 = _loc_5[1].length;
                                    }
                                    numberFormatter.precision = _loc_4;
                                }
                            }
                        }
                        if (!_loc_10)
                        {
                            _loc_11 = Number(_loc_3);
                            if (argument != "value")
                            {
                            }
                            if (argument != "open")
                            {
                            }
                            if (argument != "close")
                            {
                            }
                            if (argument != "low")
                            {
                            }
                            if (argument != "total")
                            {
                            }
                            if (argument == "high")
                            {
                                if (usePrefixes)
                                {
                                    _loc_3 = Utils.addPrefix(_loc_3, bigPrefixes, smallPrefixes, numberFormatter);
                                }
                                else
                                {
                                    _loc_3 = numberFormatter.format(_loc_3);
                                }
                            }
                            if (!isNaN(_loc_11))
                            {
                            }
                            if (!usePositiveNegativeOnPercentsOnly)
                            {
                                if (_loc_11 >= 0)
                                {
                                }
                                if (!isNaN(positiveColor))
                                {
                                    _loc_3 = "<font color=\'" + Utils.dec2hex(positiveColor) + "\'>" + _loc_3 + "";
                                }
                                if (_loc_11 < 0)
                                {
                                }
                                if (!isNaN(negativeColor))
                                {
                                    _loc_3 = "<font color=\'" + Utils.dec2hex(negativeColor) + "\'>" + _loc_3 + "";
                                }
                            }
                        }
                        if (_loc_8)
                        {
                            numberFormatter.precision = -1;
                        }
                    }
                    if (_loc_3 == null)
                    {
                        _loc_3 = "";
                    }
                    return _loc_3;
                }
                else if (dataItem.hasOwnProperty("dataContext"))
                {
                    if (dataItem.dataContext)
                    {
                        if (dataItem.dataContext.hasOwnProperty(argument))
                        {
                            _loc_3 = dataItem.dataContext[argument];
                            if (_loc_3 is Number)
                            {
                                if (numberFormatter.precision == -1)
                                {
                                    _loc_8 = true;
                                    if (_loc_3 is Number)
                                    {
                                        _loc_4 = 0;
                                        if (String(_loc_3).indexOf("e") != -1)
                                        {
                                        }
                                        if (!usePrefixes)
                                        {
                                            _loc_10 = true;
                                        }
                                        else
                                        {
                                            _loc_5 = String(_loc_3).split(".");
                                            if (_loc_5.length == 2)
                                            {
                                                _loc_4 = _loc_5[1].length;
                                            }
                                            numberFormatter.precision = _loc_4;
                                        }
                                    }
                                }
                                if (!_loc_10)
                                {
                                    if (usePrefixes)
                                    {
                                        _loc_3 = Utils.addPrefix(_loc_3, bigPrefixes, smallPrefixes, numberFormatter);
                                    }
                                    else
                                    {
                                        _loc_3 = numberFormatter.format(_loc_3);
                                    }
                                }
                                if (_loc_8)
                                {
                                    numberFormatter.precision = -1;
                                }
                            }
                            if (_loc_3 == null)
                            {
                                _loc_3 = "";
                            }
                            return _loc_3;
                        }
                        else
                        {
                            return "";
                        }
                    }
                    else
                    {
                        return "[[" + argument + "]]";
                    }
                }
                else
                {
                    return "[[" + argument + "]]";
                }
            }// end function
            );
            return newstr;
        }// end function

        public static function roundTo(param1:Number, param2:Number) : Number
        {
            param2 = Math.round(param2);
            var _loc_3:* = Math.pow(10, param2);
            return Math.round(param1 * _loc_3) / _loc_3;
        }// end function

        public static function dec2hex(param1:Number) : String
        {
            var _loc_2:* = param1.toString(16).toUpperCase().split("");
            var _loc_3:* = _loc_2.length;
            var _loc_4:Number = 0;
            while (_loc_4 < 6 - _loc_3)
            {
                
                _loc_2.unshift("0");
                _loc_4 = _loc_4 + 1;
            }
            return "#" + _loc_2.join("");
        }// end function

        public static function toGrayScale(param1:DisplayObject) : void
        {
            var _loc_2:Array = [0.3, 0.59, 0.11, 0, 0, 0.3, 0.59, 0.11, 0, 0, 0.3, 0.59, 0.11, 0, 0, 0, 0, 0, 1, 0];
            var _loc_3:* = new ColorMatrixFilter(_loc_2);
            param1.filters = [_loc_3];
            return;
        }// end function

        public static function checkNull(param1:String, param2:String) : String
        {
            if (param1 == null)
            {
                param1 = param2;
            }
            return param1;
        }// end function

        public static function truncateText(param1:IUITextField, param2:UITextFormat, param3:Boolean, param4:Boolean = false) : void
        {
            var _loc_5:String = null;
            if (param1.textWidth > param1.width)
            {
                _loc_5 = param1.text;
                _loc_5 = _loc_5.substr(0, _loc_5.length - 2);
                param1.text = _loc_5;
                truncateText(param1, param2, param3, true);
            }
            else if (param4)
            {
                _loc_5 = param1.text;
                _loc_5 = _loc_5.substr(0, _loc_5.length - 2);
                param1.text = _loc_5 + "...";
                param1.setTextFormat(param2);
                param1.antiAliasType = param2.antiAliasType;
                param1.gridFitType = param2.gridFitType;
                param1.sharpness = param2.sharpness;
                param1.thickness = param2.thickness;
                param1.embedFonts = param3;
                return;
            }
            return;
        }// end function

        public static function replace(param1:String, param2:String, param3:String) : String
        {
            return param1.split(param2).join(param3);
        }// end function

        public static function toCoordinate(param1:String, param2:Number, param3:Number = NaN) : Number
        {
            var _loc_4:Number = NaN;
            if (param1)
            {
                if (param3)
                {
                    if (param3 < param2)
                    {
                        param2 = param3;
                    }
                }
                _loc_4 = Number(param1);
                if (param1.substr(0, 1) == "!")
                {
                    _loc_4 = param2 - Number(param1.substr(1));
                }
                if (param1.substr(-1) == "%")
                {
                    _loc_4 = param2 * Number(param1.substr(0, (param1.length - 1))) / 100;
                }
            }
            return _loc_4;
        }// end function

        public static function getClosestIndex(param1:ArrayCollection, param2:String, param3:Number, param4:Boolean, param5:Number, param6:Number) : Number
        {
            var _loc_9:Number = NaN;
            var _loc_10:Number = NaN;
            if (param5 < 0)
            {
                param5 = 0;
            }
            if (param6 > (param1.length - 1))
            {
                param6 = param1.length - 1;
            }
            var _loc_7:* = param5 + int((param6 - param5) / 2);
            var _loc_8:* = param1.getItemAt(_loc_7)[param2];
            if (param6 - param5 <= 1)
            {
                if (param4)
                {
                    return param5;
                }
                _loc_9 = param1.getItemAt(param5)[param2];
                _loc_10 = param1.getItemAt(param6)[param2];
                if (Math.abs(_loc_9 - param3) < Math.abs(_loc_10 - param3))
                {
                    return param5;
                }
                return param6;
            }
            if (param3 == _loc_8)
            {
                return _loc_7;
            }
            if (param3 < _loc_8)
            {
                return getClosestIndex(param1, param2, param3, param4, param5, _loc_7);
            }
            return getClosestIndex(param1, param2, param3, param4, _loc_7, param6);
        }// end function

        public static function toColor(param1:Object) : uint
        {
            return StyleManager.getColorName(param1);
        }// end function

        public static function toOriginalColors(param1:DisplayObject) : void
        {
            var _loc_2:Array = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];
            var _loc_3:* = new ColorMatrixFilter(_loc_2);
            param1.filters = [_loc_3];
            return;
        }// end function

    }
}
